package com.example.sdbtspringboot.controller;

import cn.hutool.core.io.FileUtil;
import com.example.sdbtspringboot.common.AuthAccess;
import com.example.sdbtspringboot.common.Result;
import org.apache.coyote.Response;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * @Description: 文件处理类
 * @Author: cao
 * @Date: 2024/5/29 15:36
 */
@RestController
@RequestMapping("/file")
public class FileController {

    @Value("${ip:localhost}")
    String ip;

    @Value("${server.port}")
    String port;

    private static final String ROOT_PATH = System.getProperty("user.dir") + File.separator + "\\files";


    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {
//        String originalFilename = file.getOriginalFilename();//文件原始名称
//        String mainName = FileUtil.mainName(originalFilename);//文件名
//        String extName = FileUtil.extName("文件后缀");//文件后缀
//        String projectPath = System.getProperty("user.dir");//文件路径sdbtspringboot  D:\idea project\sdbtspringboot
//        String filesPath = projectPath + "\\files";//文件存储目录D:\idea project\sdbtspringboot\files
//        //实际存储到磁盘的文件名称
////        String fileRealPath=filesPath+"\\"+fileName;//
////        File saveFile = new File(fileRealPath);
//        File parentFile = new File(filesPath);
//        if (!parentFile.exists()) {
//            parentFile.mkdir();//if没有这个目录，就创建
//
//        }
//        File saveFile = new File(filesPath + originalFilename);
//        if (saveFile.exists()) {  //如果当前上传的文件已经存在了，那么这个时候重命名一个文件名
//            originalFilename = System.currentTimeMillis() + "_" + mainName + "." + extName;
//            saveFile = new File(filesPath + originalFilename);
//        }
//
//        file.transferTo(saveFile);//存储文件传到这个本地的磁盘
//        String url = "http://" + ip + ":" + port + "/file/download/" + originalFilename;
//        return Result.success(url);//返回文件的链接，即文件的下载地址，地址由后台提供出来
//    }

        String originalFilename = file.getOriginalFilename();//文件原始名称
        String mainName = FileUtil.mainName(originalFilename);//文件名
        String extName = FileUtil.extName(originalFilename);//文件后缀
        if(!FileUtil.exist(ROOT_PATH)){
            FileUtil.mkdir(ROOT_PATH);//if没有这个目录，就创建

        }
        if (FileUtil.exist(ROOT_PATH+File.separator+originalFilename)){  //如果当前上传的文件已经存在了，那么这个时候重命名一个文件名
            originalFilename=System.currentTimeMillis()+"_" + mainName + "." + extName;

        }
        File saveFile =new File(ROOT_PATH+File.separator+originalFilename);
        file.transferTo(saveFile);//存储文件传到这个本地的磁盘
        String url="http://"+ip+":"+port+"/file/download/"+originalFilename;
        return Result.success(url);//返回文件的链接，即文件的下载地址，地址由后台提供出来
}


    @AuthAccess
    @GetMapping("/download/{fileName}")
    public void download( @PathVariable String fileName,HttpServletResponse response) throws IOException {
//        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));//图片文件下载，不加默认预览
        response.addHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8"));//预览
        String filePath = ROOT_PATH + File.separator + fileName;
        if (!FileUtil.exist(filePath)){
            return;
        } 
        byte[] bytes = FileUtil.readBytes(filePath);

        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(bytes);
        outputStream.flush();
        outputStream.close();

    }


}
